package com.spark.util.example

import com.spark.util.client.RedisClient
import com.spark.util.utils.PropertiesUtil

object RedisExample {

  def main(args: Array[String]): Unit = {

    PropertiesUtil.load("dev.properties")

    val host = PropertiesUtil.getString("redis.host")
    val port = PropertiesUtil.getInt("redis.port")
    val password = PropertiesUtil.getString("redis.password")

    val sink = RedisClient(host,port,password)
    sink.usingRedis{ x=>
      // 1string
      x.set("key","value")
      x.get("key")
      x.del("key")
      x.incrBy("key",1)//自增，要求value必须能解析成数值类型
      x.decrBy("key",1)//自减
      // 2hash
      //相当于一个key对于一个map，map中还有key-value 相当于一个key对于一个map，map中还有key-value
      x.hset("key","feild1","value1")
      x.hget("key","feild1")
      // 3list
      //存储:push,lpush（左边添加），rpush（右边添加）
      //取值:pop,lpop lpop list(左边取,移除list最左边的值) ，rpop rpop list（右边取，移除list最右边的值）
      //查看list:lrange key 0 -1(0 -1表示查看所有)
      x.lpush("list","a","b","c","d","e")
      x.lpop("list")
      x.lrange("list",0,-1)
      // 4set,无序不重复的,出现重复会覆盖
      //存储：sadd key v1 v2 v3 …
      //移除：srem key v
      //查看set集合：smembers key
      //差集：sdiff seta setb（seta中有setb中没有的元素）
      //交集：sinter seta setb
      //并集：sunion seta setb
      x.sadd("sets","a","b","c","d","e")
      x.srem("sets","a")
      x.smembers("sets")
      // 5SortedSet,有序Set
      //取值：取指定的值 zrem key value
      //取所有的值(不包括分数)：zrange key 0 -1，降序取值用zrevrange key 0 -1
      //取所有的值(带分数):zrange(zrevrange) key 0 -1 withscores
      //设置key
      //设置key的过期时间：expired key 过期时间(秒)
      //查看key的有效剩余时间：ttl key,-1：表示持久化-2: 表示该key不存在
      //清除key的过期时间，持久化该key：persist key
      x.expire("key",30)
      x.ttl("key")
      x.persist("key")
    }
  }
}
